# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.ProximityBeacon.V1beta1.Api.Beacons do
  @moduledoc """
  API calls for all endpoints tagged `Beacons`.
  """

  alias GoogleApi.ProximityBeacon.V1beta1.Connection
  alias GoogleApi.Gax.{Request, Response}

  @library_version Mix.Project.config() |> Keyword.get(:version, "")

  @doc """
  Activates a beacon. A beacon that is active will return information
  and attachment data when queried via `beaconinfo.getforobserved`.
  Calling this method on an already active beacon will do nothing (but
  will return a successful response code).

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon that should be activated. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to activate. If the project id is not
          specified then the project making the request is used. The project id
          must match the project that owns the beacon.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_activate(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Empty.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_activate(connection, beacon_name, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/{+beaconName}:activate", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}])
  end

  @doc """
  Deactivates a beacon. Once deactivated, the API will not return
  information nor attachment data for the beacon when queried via
  `beaconinfo.getforobserved`. Calling this method on an already inactive
  beacon will do nothing (but will return a successful response code).

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon that should be deactivated. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to deactivate. If the project id is not
          specified then the project making the request is used. The project id must
          match the project that owns the beacon.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_deactivate(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Empty.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_deactivate(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/{+beaconName}:deactivate", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}])
  end

  @doc """
  Decommissions the specified beacon in the service. This beacon will no
  longer be returned from `beaconinfo.getforobserved`. This operation is
  permanent -- you will not be able to re-register a beacon with this ID
  again.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon that should be decommissioned. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID of the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to decommission. If the project id is not
          specified then the project making the request is used. The project id
          must match the project that owns the beacon.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_decommission(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Empty.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_decommission(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/{+beaconName}:decommission", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}])
  end

  @doc """
  Deletes the specified beacon including all diagnostics data for the beacon
  as well as any attachments on the beacon (including those belonging to
  other projects). This operation cannot be undone.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon that should be deleted. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to delete. If not provided, the project
          that is making the request is used.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_delete(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Empty.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_delete(connection, beacon_name, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:delete)
      |> Request.url("/v1beta1/{+beaconName}", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}])
  end

  @doc """
  Returns detailed information about the specified beacon.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **viewer**, **Is owner** or **Can edit** permissions in
  the Google Developers Console project.

  Requests may supply an Eddystone-EID beacon name in the form:
  `beacons/4!beaconId` where the `beaconId` is the base16 ephemeral ID
  broadcast by the beacon. The returned `Beacon` object will contain the
  beacon's stable Eddystone-UID. Clients not authorized to resolve the
  beacon's ephemeral Eddystone-EID broadcast will receive an error.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Resource name of this beacon. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to request. If the project id is not specified
          then the project making the request is used. The project id must match the
          project that owns the beacon.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_get(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Beacon.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_get(connection, beacon_name, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:get)
      |> Request.url("/v1beta1/{+beaconName}", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}])
  end

  @doc """
  Searches the beacon registry for beacons that match the given search
  criteria. Only those beacons that the client has permission to list
  will be returned.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **viewer**, **Is owner** or **Can edit** permissions in
  the Google Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:pageSize` (*type:* `integer()`) - The maximum number of records to return for this request, up to a
          server-defined upper limit.
      *   `:pageToken` (*type:* `String.t`) - A pagination token obtained from a previous request to list beacons.
      *   `:projectId` (*type:* `String.t`) - The project id to list beacons under. If not present then the project
          credential that made the request is used as the project.
          Optional.
      *   `:q` (*type:* `String.t`) - Filter query string that supports the following field filters:

          * **description:`"<string>"`**
            For example: **description:"Room 3"**
            Returns beacons whose description matches tokens in the string "Room 3"
            (not necessarily that exact string).
            The string must be double-quoted.
          * **status:`<enum>`**
            For example: **status:active**
            Returns beacons whose status matches the given value. Values must be
            one of the Beacon.Status enum values (case insensitive). Accepts
            multiple filters which will be combined with OR logic.
          * **stability:`<enum>`**
            For example: **stability:mobile**
            Returns beacons whose expected stability matches the given value.
            Values must be one of the Beacon.Stability enum values (case
            insensitive). Accepts multiple filters which will be combined with
            OR logic.
          * **place\\_id:`"<string>"`**
            For example: **place\\_id:"ChIJVSZzVR8FdkgRXGmmm6SslKw="**
            Returns beacons explicitly registered at the given place, expressed as
            a Place ID obtained from [Google Places API](/places/place-id). Does not
            match places inside the given place. Does not consider the beacon's
            actual location (which may be different from its registered place).
            Accepts multiple filters that will be combined with OR logic. The place
            ID must be double-quoted.
          * **registration\\_time`[<|>|<=|>=]<integer>`**
            For example: **registration\\_time>=1433116800**
            Returns beacons whose registration time matches the given filter.
            Supports the operators: <, >, <=, and >=. Timestamp must be expressed as
            an integer number of seconds since midnight January 1, 1970 UTC. Accepts
            at most two filters that will be combined with AND logic, to support
            "between" semantics. If more than two are supplied, the latter ones are
            ignored.
          * **lat:`<double> lng:<double> radius:<integer>`**
            For example: **lat:51.1232343 lng:-1.093852 radius:1000**
            Returns beacons whose registered location is within the given circle.
            When any of these fields are given, all are required. Latitude and
            longitude must be decimal degrees between -90.0 and 90.0 and between
            -180.0 and 180.0 respectively. Radius must be an integer number of
            meters between 10 and 1,000,000 (1000 km).
          * **property:`"<string>=<string>"`**
            For example: **property:"battery-type=CR2032"**
            Returns beacons which have a property of the given name and value.
            Supports multiple filters which will be combined with OR logic.
            The entire name=value string must be double-quoted as one string.
          * **attachment\\_type:`"<string>"`**
            For example: **attachment_type:"my-namespace/my-type"**
            Returns beacons having at least one attachment of the given namespaced
            type. Supports "any within this namespace" via the partial wildcard
            syntax: "my-namespace/*". Supports multiple filters which will be
            combined with OR logic. The string must be double-quoted.
          * **indoor\\_level:`"<string>"`**
            For example: **indoor\\_level:"1"**
            Returns beacons which are located on the given indoor level. Accepts
            multiple filters that will be combined with OR logic.

          Multiple filters on the same field are combined with OR logic (except
          registration_time which is combined with AND logic).
          Multiple filters on different fields are combined with AND logic.
          Filters should be separated by spaces.

          As with any HTTP query string parameter, the whole filter expression must
          be URL-encoded.

          Example REST request:
          `GET
          /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconsResponse{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_list(Tesla.Env.client(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconsResponse.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_list(connection, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :pageSize => :query,
      :pageToken => :query,
      :projectId => :query,
      :q => :query
    }

    request =
      Request.new()
      |> Request.method(:get)
      |> Request.url("/v1beta1/beacons", %{})
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(
      opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconsResponse{}]
    )
  end

  @doc """
  Registers a previously unregistered beacon given its `advertisedId`.
  These IDs are unique within the system. An ID can be registered only once.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the project the beacon will be registered to. If
          the project id is not specified then the project making the request
          is used.
          Optional.
      *   `:body` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Model.Beacon.t`) - 
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_register(Tesla.Env.client(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Beacon.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_register(connection, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query,
      :body => :body
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/beacons:register", %{})
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}])
  end

  @doc """
  Updates the information about the specified beacon. **Any field that you do
  not populate in the submitted beacon will be permanently erased**, so you
  should follow the "read, modify, write" pattern to avoid inadvertently
  destroying data.

  Changes to the beacon status via this method will be  silently ignored.
  To update beacon status, use the separate methods on this API for
  activation, deactivation, and decommissioning.
  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Resource name of this beacon. A beacon name has the format
      "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by
      the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon.

      This field must be left empty when registering. After reading a beacon,
      clients can use the name for future operations.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the beacon to update. If the project id is not
          specified then the project making the request is used. The project id
          must match the project that owns the beacon.
          Optional.
      *   `:body` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Model.Beacon.t`) - 
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_update(Tesla.Env.client(), String.t(), keyword(), keyword()) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Beacon.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_update(connection, beacon_name, optional_params \\ [], opts \\ []) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query,
      :body => :body
    }

    request =
      Request.new()
      |> Request.method(:put)
      |> Request.url("/v1beta1/{+beaconName}", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Beacon{}])
  end

  @doc """
  Deletes multiple attachments on a given beacon. This operation is
  permanent and cannot be undone.

  You can optionally specify `namespacedType` to choose which attachments
  should be deleted. If you do not specify `namespacedType`,  all your
  attachments on the given beacon will be deleted. You also may explicitly
  specify `*/*` to delete all.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - The beacon whose attachments should be deleted. A beacon name has the
      format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
      by the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:namespacedType` (*type:* `String.t`) - Specifies the namespace and type of attachments to delete in
          `namespace/type` format. Accepts `*/*` to specify
          "all types in all namespaces".
          Optional.
      *   `:projectId` (*type:* `String.t`) - The project id to delete beacon attachments under. This field can be
          used when "*" is specified to mean all attachment namespaces. Projects
          may have multiple attachments with multiple namespaces. If "*" is
          specified and the projectId string is empty, then the project
          making the request is used.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.DeleteAttachmentsResponse{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_attachments_batch_delete(
          Tesla.Env.client(),
          String.t(),
          keyword(),
          keyword()
        ) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.DeleteAttachmentsResponse.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_attachments_batch_delete(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :namespacedType => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/{+beaconName}/attachments:batchDelete", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(
      opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.DeleteAttachmentsResponse{}]
    )
  end

  @doc """
  Associates the given data with the specified beacon. Attachment data must
  contain two parts:
  <ul>
  <li>A namespaced type.</li>
  <li>The actual attachment data itself.</li>
  </ul>
  The namespaced type consists of two parts, the namespace and the type.
  The namespace must be one of the values returned by the `namespaces`
  endpoint, while the type can be a string of any characters except for the
  forward slash (`/`) up to 100 characters in length.

  Attachment data can be up to 1024 bytes long.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon on which the attachment should be created. A beacon name has the
      format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
      by the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the project the attachment will belong to. If
          the project id is not specified then the project making the request
          is used.
          Optional.
      *   `:body` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Model.BeaconAttachment.t`) - 
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.BeaconAttachment{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_attachments_create(
          Tesla.Env.client(),
          String.t(),
          keyword(),
          keyword()
        ) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.BeaconAttachment.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_attachments_create(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query,
      :body => :body
    }

    request =
      Request.new()
      |> Request.method(:post)
      |> Request.url("/v1beta1/{+beaconName}/attachments", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(
      opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.BeaconAttachment{}]
    )
  end

  @doc """
  Deletes the specified attachment for the given beacon. Each attachment has
  a unique attachment name (`attachmentName`) which is returned when you
  fetch the attachment data via this API. You specify this with the delete
  request to control which attachment is removed. This operation cannot be
  undone.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **Is owner** or **Can edit** permissions in the Google
  Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `attachment_name` (*type:* `String.t`) - The attachment name (`attachmentName`) of
      the attachment to remove. For example:
      `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For
      Eddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the
      beacon's current EID, or its "stable" Eddystone-UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:projectId` (*type:* `String.t`) - The project id of the attachment to delete. If not provided, the project
          that is making the request is used.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_attachments_delete(
          Tesla.Env.client(),
          String.t(),
          keyword(),
          keyword()
        ) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.Empty.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_attachments_delete(
        connection,
        attachment_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:delete)
      |> Request.url("/v1beta1/{+attachmentName}", %{
        "attachmentName" => URI.encode(attachment_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.Empty{}])
  end

  @doc """
  Returns the attachments for the specified beacon that match the specified
  namespaced-type pattern.

  To control which namespaced types are returned, you add the
  `namespacedType` query parameter to the request. You must either use
  `*/*`, to return all attachments, or the namespace must be one of
  the ones returned from the  `namespaces` endpoint.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **viewer**, **Is owner** or **Can edit** permissions in
  the Google Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon whose attachments should be fetched. A beacon name has the
      format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
      by the beacon and N is a code for the beacon's type. Possible values are
      `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
      for AltBeacon. For Eddystone-EID beacons, you may use either the
      current EID or the beacon's "stable" UID.
      Required.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:namespacedType` (*type:* `String.t`) - Specifies the namespace and type of attachment to include in response in
          <var>namespace/type</var> format. Accepts `*/*` to specify
          "all types in all namespaces".
      *   `:projectId` (*type:* `String.t`) - The project id to list beacon attachments under. This field can be
          used when "*" is specified to mean all attachment namespaces. Projects
          may have multiple attachments with multiple namespaces. If "*" is
          specified and the projectId string is empty, then the project
          making the request is used.
          Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconAttachmentsResponse{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_attachments_list(
          Tesla.Env.client(),
          String.t(),
          keyword(),
          keyword()
        ) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconAttachmentsResponse.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_attachments_list(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :namespacedType => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:get)
      |> Request.url("/v1beta1/{+beaconName}/attachments", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(
      opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.ListBeaconAttachmentsResponse{}]
    )
  end

  @doc """
  List the diagnostics for a single beacon. You can also list diagnostics for
  all the beacons owned by your Google Developers Console project by using
  the beacon name `beacons/-`.

  Authenticate using an [OAuth access
  token](https://developers.google.com/identity/protocols/OAuth2) from a
  signed-in user with **viewer**, **Is owner** or **Can edit** permissions in
  the Google Developers Console project.

  ## Parameters

  *   `connection` (*type:* `GoogleApi.ProximityBeacon.V1beta1.Connection.t`) - Connection to server
  *   `beacon_name` (*type:* `String.t`) - Beacon that the diagnostics are for.
  *   `optional_params` (*type:* `keyword()`) - Optional parameters
      *   `:"$.xgafv"` (*type:* `String.t`) - V1 error format.
      *   `:access_token` (*type:* `String.t`) - OAuth access token.
      *   `:alt` (*type:* `String.t`) - Data format for response.
      *   `:callback` (*type:* `String.t`) - JSONP
      *   `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response.
      *   `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
      *   `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user.
      *   `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks.
      *   `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.
      *   `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart").
      *   `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart").
      *   `:alertFilter` (*type:* `String.t`) - Requests only beacons that have the given alert. For example, to find
          beacons that have low batteries use `alert_filter=LOW_BATTERY`.
      *   `:pageSize` (*type:* `integer()`) - Specifies the maximum number of results to return. Defaults to
          10. Maximum 1000. Optional.
      *   `:pageToken` (*type:* `String.t`) - Requests results that occur after the `page_token`, obtained from the
          response to a previous request. Optional.
      *   `:projectId` (*type:* `String.t`) - Requests only diagnostic records for the given project id. If not set,
          then the project making the request will be used for looking up
          diagnostic records. Optional.
  *   `opts` (*type:* `keyword()`) - Call options

  ## Returns

  *   `{:ok, %GoogleApi.ProximityBeacon.V1beta1.Model.ListDiagnosticsResponse{}}` on success
  *   `{:error, info}` on failure
  """
  @spec proximitybeacon_beacons_diagnostics_list(
          Tesla.Env.client(),
          String.t(),
          keyword(),
          keyword()
        ) ::
          {:ok, GoogleApi.ProximityBeacon.V1beta1.Model.ListDiagnosticsResponse.t()}
          | {:ok, Tesla.Env.t()}
          | {:error, Tesla.Env.t()}
  def proximitybeacon_beacons_diagnostics_list(
        connection,
        beacon_name,
        optional_params \\ [],
        opts \\ []
      ) do
    optional_params_config = %{
      :"$.xgafv" => :query,
      :access_token => :query,
      :alt => :query,
      :callback => :query,
      :fields => :query,
      :key => :query,
      :oauth_token => :query,
      :prettyPrint => :query,
      :quotaUser => :query,
      :uploadType => :query,
      :upload_protocol => :query,
      :alertFilter => :query,
      :pageSize => :query,
      :pageToken => :query,
      :projectId => :query
    }

    request =
      Request.new()
      |> Request.method(:get)
      |> Request.url("/v1beta1/{+beaconName}/diagnostics", %{
        "beaconName" => URI.encode(beacon_name, &URI.char_unreserved?/1)
      })
      |> Request.add_optional_params(optional_params_config, optional_params)
      |> Request.library_version(@library_version)

    connection
    |> Connection.execute(request)
    |> Response.decode(
      opts ++ [struct: %GoogleApi.ProximityBeacon.V1beta1.Model.ListDiagnosticsResponse{}]
    )
  end
end
